home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / progs / sviluppo / pike-0.4.0 / lib / include / getopt.pre.pike < prev    next >
Text File  |  1997-01-10  |  3KB  |  150 lines

  1. //  startpid = (int)find_arg(argv, "s", ({ "start-script-pid" }),
  2. //                  ({ "ROXEN_START_SCRIPT_PID"}));
  3.  
  4. //  configuration_dir = find_arg(argv, "d", ({ "config-dir",
  5. //                         "configurations",
  6. //                         "configuration-directory" }),
  7. //                      ({ "ROXEN_CONFIGDIR", "CONFIGURATIONS" }),
  8. //                       "../configurations");
  9.  
  10.  
  11. string|int find_option(array argv,
  12.                array|string shortform,
  13.                array|string|void longform,
  14.                array|string|void envvars,
  15.                mixed|void def)
  16. {
  17.   mixed value;
  18.   int i,hasarg;
  19.  
  20.   hasarg=query_num_arg() == 5;
  21.   if(!arrayp(longform)) longform=({longform});
  22.   if(!arrayp(shortform)) shortform=({shortform});
  23.   if(!arrayp(envvars)) envvars=({envvars});
  24.  
  25.   for(i=1; i<sizeof(argv); i++)
  26.   {
  27.     if(argv[i] && strlen(argv[i]) > 1)
  28.     {
  29.       if(argv[i][0] == '-')
  30.       {
  31.     if(argv[i][1] == '-')
  32.     {
  33.       string tmp;
  34.       int nf;
  35.  
  36.       if(argv[i]=="--") break;
  37.  
  38.       sscanf(tmp=argv[i], "%s=%s", tmp, value);
  39.       
  40.       if(search(longform, tmp[2..]) != -1)
  41.       {
  42.         argv[i]=0;
  43.         if(hasarg)
  44.         {
  45.           if(!value)
  46.           {
  47.         if(i == sizeof(argv)-1)
  48.         {
  49.           werror("No argument to option "+tmp+".\n");
  50.           exit(1);
  51.         }
  52.         value=argv[i+1];
  53.         argv[i+1]=1;
  54.           }
  55.           return value;
  56.         } else {
  57.           return value || 1;
  58.         }
  59.       }
  60.     } else {
  61.       int j;
  62.       for(j=1;j<strlen(argv[i]);j++)
  63.       {
  64.             string opt;
  65.             int pos;
  66.         if(search(shortform, opt=argv[i][j..j]) != -1)
  67.         {
  68.               string arg;
  69.               arg=argv[i][j+1..];
  70.  
  71.           if(hasarg)
  72.           {
  73.         if(arg=="")
  74.         {
  75.           if(i == sizeof(argv)-1)
  76.                   {
  77.                     werror("No argument to option -"+argv[i][j..j]+".\n");
  78.                     exit(1);
  79.                   }
  80.  
  81.                   value=argv[i+1];
  82.           argv[i+1] = 0;
  83.         } else {
  84.           value=arg;
  85.                   arg="";
  86.         }
  87.           } else {
  88.         value=1;
  89.           }
  90.  
  91.           argv[i]=argv[i][..j-1]+arg;
  92.           if(argv[i]=="-") argv[i]=0;
  93.           return value;
  94.         }
  95.       }
  96.     }
  97.       } else {
  98.     if(getenv("POSIX_ME_HARDER"))
  99.       break;
  100.       }
  101.     }
  102.   }
  103.  
  104.   if(arrayp(envvars))
  105.     foreach(envvars, value)
  106.       if(value && (value=getenv(value)))
  107.     return value;
  108.   
  109.   return def;
  110. }
  111.  
  112.  
  113. string *get_args(string *argv)
  114. {
  115.   int i;
  116.   for(i=1;i<sizeof(argv);i++)
  117.   {
  118.     if(argv[i] && strlen(argv[i])>1 && argv[i][0]=='-')
  119.     {
  120.       if(argv[i][1]=='-')
  121.       {
  122.     if(argv[i]=="--")
  123.     {
  124.       argv[i]=0;
  125.       break;
  126.     }else{
  127.       werror("Unknown option "+argv[i]+".\n");
  128.       exit(1);
  129.     }
  130.       }else{
  131.     if(strlen(argv[i]) == 2)
  132.       werror("Unknown option "+argv[i]+".\n");
  133.     else
  134.       werror("Unknown options "+argv[i]+".\n");
  135.     exit(1);
  136.       }
  137.     }
  138.   }
  139.  
  140.   argv-=({0});
  141.  
  142.   return argv;
  143. }
  144.  
  145. void create()
  146. {
  147.   add_constant("find_option",find_option);
  148.   add_constant("get_args",get_args);
  149. }
  150.